package com.zp.self.module.level_5_设计模式.创建型模式.Ⅴ_建造者模式.Bulider注解原理;

import lombok.Data;
import lombok.Getter;

/**
 * @author ：by Zeng Peng
 * @date ：Created 2022/6/26 20:02
 * @description ：当一个类构造器需要传入很多参数时，如果创建这个类的实例，代码可读性会非常差，而且很容易引入错误，
 * 此时就可以利用建造者模式进行重构。
 */
@Data
public class Bike {
    public Bike(BikeBuilder bikeBuilder) {
        this.frame=bikeBuilder.getFrame();
        this.seat=bikeBuilder.getSeat();
    }

    /**
     * Description: 骨架
     */
    private String frame;
    /**
     * Description: 座位
     */
    private String seat;

    public static final class BikeBuilder {
        /**
         * Description: 骨架
         */
        @Getter
        private String frame;
        /**
         * Description: 座位
         */
        @Getter
        private String seat;

        public BikeBuilder frame(String frame) {
            this.frame=frame;
            return this;
        }

        public BikeBuilder seat(String seat) {
            this.seat=seat;
            return this;
        }

        public Bike getBuildResult(){
            return new Bike(this);
        }
    }
}
